<?php

class ValidadorDeFormularioDeDeficiencia extends Model{

	/*******************
	 * ATRIBUTOS
	 *******************/

	private $mensagemStatus;
	private $formularioValido;
	public $camposDoFormulario;
	public $errors;

	/*******************
	 * CONSTRUTOR
	 *******************/

	public function __construct() {
		// load database library into $this->db (can be omitted if not required)
		//parent::__construct();
		$this->mensagemStatus = "";
		$this->formularioValido = false;
		$this->errors = array();
		$this->camposDoFormulario = null;
	}

	/*******************
	 * METODOS
	 *******************/

	//Verifica se há erros em qualquer um dos campos do formulário, caso houver devolve o array de erros
	public function verificarCamposValidos(){
		$this->camposDoFormulario = Validate::factory($_POST);

		if((isset($_POST['deficienciaAuditiva'])) or (isset($_POST['deficienciaFala'])) or (isset($_POST['deficienciaFisica'])) or (isset($_POST['deficienciaVisual'])) or (isset($_POST['deficienciaIntelectual']))){

			// verificando checkbox da deficiencia auditiva
			if(isset($_POST['deficienciaAuditiva'])){
				//regra para caso de estar selecionado checkbox deficiencia auditiva, porém não foi escolhido nenhum select
				$this->camposDoFormulario->rule('auditiva', 'not_empty');
				if ($_POST['auditiva'] == "outra"){
					//regra para caso estar marcado select outra, verificar se input da outra contem algo
					$this->camposDoFormulario->rule('auditivaOutra', 'not_empty');
				}
			}

			// verificando checkbox da deficiencia fala
			if(isset($_POST['deficienciaFala'])){
				//regra para caso de estar selecionado checkbox deficiencia fala, porém não foi escolhido nenhum select
				$this->camposDoFormulario->rule('fala', 'not_empty');
				if ($_POST['fala'] == "outra"){
					//regra para caso estar marcado select outra, verificar se input da outra contem algo
					$this->camposDoFormulario->rule('falaOutra', 'not_empty');
				}
			}

			// verificando checkbox da deficiencia fisica
			if(isset($_POST['deficienciaFisica'])){
				//regra para caso de estar selecionado checkbox deficiencia fisica, porém não foi escolhido nenhum select
				$this->camposDoFormulario->rule('fisica', 'not_empty');
				if ($_POST['fisica'] == "outra"){
					//regra para caso estar marcado select outra, verificar se input da outra contem algo
					$this->camposDoFormulario->rule('fisicaOutra', 'not_empty');
				}
			}

			// verificando checkbox da deficiencia visual
			if(isset($_POST['deficienciaVisual'])){
				//regra para caso de estar selecionado checkbox deficiencia visual, porém não foi escolhido nenhum select
				$this->camposDoFormulario->rule('visual', 'not_empty');
				if ($_POST['visual'] == "outra"){
					//regra para caso estar marcado select outra, verificar se input da outra contem algo
					$this->camposDoFormulario->rule('visualOutra', 'not_empty');
				}
			}

			// verificando checkbox da deficiencia intelectual
			if(isset($_POST['deficienciaIntelectual'])){
				//verifica se foi selecionado algo da deficiencia intelectual
				if((isset($_POST['intelectual']))){					
					$this->camposDoFormulario->rule('intelectual', 'not_empty');
				}
				if(isset($_POST['deficienciaIntelectualOutra'])){
					//regra para caso estar marcado select outra, verificar se input da outra contem algo
					$this->camposDoFormulario->rule('intelectualOutra', 'not_empty');
				}
			}
			if ($this->camposDoFormulario->check()){
				$this->setFormularioValido(true);
			}
		}
		else{
			$this->setFormularioValido(false);
			
		}
		if (!$this->isFormularioValido()){
			$this->setFormularioValido(false);
			$this->setErros($this->camposDoFormulario->errors('camposDoFormularioDeFormularioDeDeficiencia'));
			$this->redefinirMensagensDeErro();
		}


	}

	private function redefinirMensagensDeErro(){
		//verifica se algum campo foi selecionado para definir mensagem de erro
		if((!isset($_POST['deficienciaAuditiva'])) and (!isset($_POST['deficienciaFala'])) and (!isset($_POST['deficienciaFisica'])) and (!isset($_POST['deficienciaVisual'])) and (!isset($_POST['deficienciaIntelectual']))){
			$this->errors['nenhumaDeficienciaSelecionada'] = "Selecione pelo menos uma das opções de deficiencia";
		}

		//verifica se foi selecionado pelo menos uma das opcoes da deficiencia intelectual para definir mensagem de erro
		if(isset($_POST['deficienciaIntelectual'])){
			if(!isset($_POST['intelectual']) and !isset($_POST['deficienciaIntelectualOutra'])){
				$this->errors['nenhumaDeficienciaIntelectualSelecionada'] = "Selecione pelo menos uma das opções da deficiencia intelectual";
			}
		}

		//REDEFININDO AS MENSAGENS DE ERRO
		if(isset($this->errors['auditiva'])){
			$this->errors['auditiva'] = "Selecione pelo menos uma das opções da deficiencia auditiva";
		}
		if(isset($this->errors['fala'])){
			$this->errors['fala'] = "Selecione pelo menos uma das opções da deficiencia fala";
		}
		if(isset($this->errors['fisica'])){
			$this->errors['fisica'] = "Selecione pelo menos uma das opções da deficiencia fisica";
		}
		if(isset($this->errors['visual'])){
			$this->errors['visual'] = "Selecione pelo menos uma das opções da deficiencia visual";
		}
		if(isset($this->errors['auditivaOutra'])){
			$this->errors['auditivaOutra'] = "Defina a outra";
		}
		if(isset($this->errors['falaOutra'])){
			$this->errors['falaOutra'] = "Defina a outra";
		}
		if(isset($this->errors['visualOutra'])){
			$this->errors['visualOutra'] = "Defina a outra";
		}
		if(isset($this->errors['fisicaOutra'])){
			$this->errors['fisicaOutra'] = "Defina a outra";
		}
		if(isset($this->errors['intelectualOutra'])){
			$this->errors['intelectualOutra'] = "Defina a outra";
		}
	}



	// This might go in base Model class
	public function getFormValues() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->as_array());
	}

	// This might go in base Model class
	public function getValidationErrors() {
		return arr::overwrite($this->fields, $this->$camposDoFormulario->errors('form_errors'));
	}

	/*******************
	 * GETTERS/SETTERS
	 *******************/

	public function isFormularioValido() {
		return $this->formularioValido;
	}

	public function setFormularioValido($formularioValido){
		$this->formularioValido = $formularioValido;
	}

	public function getErros() {
		return $this->errors;
	}

	public function setErros($errors){
		$this->errors = $errors;
	}

	public function getCamposDoFormulario() {
		return $_POST;
	}

	public function setCamposDoFormulario($camposDoFormulario){
		$this->camposDoFormulario = $camposDoFormulario;
	}
}
?>